<div> 了!認識 HTML5 語意化標籤<header>、<main>、<section>
<div> 了!認識 HTML5 語意化標籤在剛開始學習網頁切版時,我們很容易習慣用 <div> 包辦所有的區塊:
<!-- 傳統無語意的 Div Soup 寫法 -->
<div class="header">...</div>
<div class="nav">...</div>
<div class="content">...</div>
<div class="footer">...</div>
雖然在瀏覽器渲染出來外觀一模一樣,但對於瀏覽器解析、搜尋引擎 (SEO) 以及螢幕閱讀器 (Screen Reader) 來說,這些全都是「沒有意義的方塊」。
因此在打造《醫藥健康小工具箱》時,我們採用 HTML5 語意化標籤 (Semantic Tags)。這就像在堆積木時給每個零件標上清晰的名稱,讓程式碼「看標籤就知道用途」:
<header>:頁面頂端的標頭區塊(放置標題與簡介)。<nav>:主導覽區塊(放置 4 大工具的分頁按鈕)。<main>:頁面主要的內容核心(一個頁面只會有一個 <main>)。<section>:獨立的功能或主題區塊(我們的 4 個小工具各自為一個 section)。<footer>:頁面底部的頁腳區塊(放置免責聲明與版權資訊)。什麼是單頁應用 (SPA)?
傳統網站點擊分頁時需要重新向伺服器請求頁面(畫面會白屏閃爍一下);而單頁應用 (Single Page Application, SPA) 則是將所有工具結構寫在同一個 index.html 中,並透過 HTML5 原生的 hidden 屬性 或 CSS 類別控制顯示與隱藏。點擊分頁時完全不需要刷頁,能提供像手機 App 般流暢的無縫體驗!
我們的 DOM 階層結構規劃如下:
<body>
├── <header> : 網站標題與馬卡龍風格 Icon
├── <nav> : 4 大工具分頁按鈕 (Tab Navigation)
├── <main> : 主要工具展示區
│ ├── <section#tool1> : 生理指標計算器 (BMI/BMR/TDEE) [預設顯示]
│ ├── <section#tool2> : 兒童用藥劑量換算器 [hidden 隱藏]
│ ├── <section#tool3> : 每日用藥時間表生成器 [hidden 隱藏]
│ └── <section#tool4> : 特殊藥品開瓶倒數計時器 [hidden 隱藏]
└── <footer> : 醫藥免責聲明與版權資訊
<header> & <nav>)
<main> & <fooler>)

因為這部分的程式碼有點多,所以就先不放完整截圖了,等到之後分別介紹各個工具的時候再來講解。
為什麼「醫藥健康工具」特別需要注重 a11y?
醫療健康應用的使用者,高機率包含高齡長者、視力退化者或手部精密操作不便的族群。如果網站無法支援螢幕閱讀器或鍵盤操作,這些最需要健康輔助工具的使用者反而會被拒之門外。
我們在 HTML 骨架中融入了以下 3 個輕量且強大的無障礙設計巧思:
傳統的 <button> 只能告訴輔具「這是一個按鈕」,但無法表達「這是一個頁籤,且目前正被開啟」。
role="tablist" 與 role="tab":可以明確告知輔具這是一組頁籤選單。aria-selected="true/false":告訴螢幕閱讀器該頁籤的開關狀態。視障使用者聽到的不再只是「生理指標計算,按鈕」,而是:「生理指標計算,分頁,已選取」。<label> 與 <input> 語意綁定(擴大點擊範圍)在輸入框設計中,我們使用 for 與 id 進行一對一精準綁定:
<label for="height">身高 (cm)</label>
<input type="number" id="height" placeholder="例如:165">
outline,確保使用 Tab 鍵切換頁面時,視力較弱的使用者能清楚看到目前光標停留在哪一個按鈕。今天我們不僅使用 HTML5 語意化標籤搭出了《醫藥健康小工具箱》的 SPA 單頁骨架,更重要的是建立了「以使用者為本」的 a11y 無障礙開發思維!
在明天的 [Day 04] 中,我們將深入剖析表單元件,學習如何設定 <input type="number"> 的輸入範圍 (min/max) 與 <select> 下拉選單的屬性。